#include <stdlib.h>
#include <string.h>
#include "genericdao.h"
#include "testmod_teste.h"

static int64_t get_ref(testmod_teste *this);
static void set_ref(testmod_teste *this, int64_t novo);
static int64_t get_id(testmod_teste *this);
static void set_id(testmod_teste *this, int64_t novo);
static char* get_nome(testmod_teste *this);
static void set_nome(testmod_teste *this, char* novo);
static int32_t get_idade(testmod_teste *this);
static void set_idade(testmod_teste *this, int32_t novo);
static int64_t get_id_Endereco(testmod_teste *this);
static void set_id_Endereco(testmod_teste *this, int64_t novo);
static Endereco* get_Endereco(testmod_teste *this);
static void set_Endereco(testmod_teste *this, Endereco *novo);
static double get_altura(testmod_teste *this);
static void set_altura(testmod_teste *this, double novo);
static Teste* get_teste(testmod_teste *this);
static void set_teste(testmod_teste *this, Teste* novo);
static int teste(testmod_teste *this,  int a, void *b);

static testmod_teste* create()
{
  testmod_teste *ptr = malloc(sizeof(testmod_teste));
  if(!ptr) return 0;
  memset(ptr,0,sizeof(testmod_teste));
  ptr->id=(GenericVar)GVAR(T_INT64);
  ptr->nome=(GenericVar)GVAR(T_PCHAR);
  ptr->idade=(GenericVar)GVAR(T_INT32);
  ptr->id_Endereco=(GenericVar)GVAR(T_INT64);
  ptr->altura=(GenericVar)GVAR(T_DOUBLE);
  return ptr;
}

static int64_t get_ref(testmod_teste *this)
{
  return this->ref;
}

static void set_ref(testmod_teste *this, int64_t novo)
{
  this->ref = novo;
}

static int64_t get_id(testmod_teste *this)
{
  return this->id.INT64VAL;
}

static void set_id(testmod_teste *this, int64_t novo)
{
  setVar(&this->id,novo);
}

static char* get_nome(testmod_teste *this)
{
  return this->nome.PCHARVAL;
}

static void set_nome(testmod_teste *this, char* novo)
{
  setVar(&this->nome,novo);
}

static int32_t get_idade(testmod_teste *this)
{
  return this->idade.INT32VAL;
}

static void set_idade(testmod_teste *this, int32_t novo)
{
  setVar(&this->idade,novo);
}

static int64_t get_id_Endereco(testmod_teste *this)
{
  return this->id_Endereco.INT64VAL;
}

static void set_id_Endereco(testmod_teste *this, int64_t novo)
{
  setVar(&this->id_Endereco,novo);
  this->EnderecoPtr = 0;
}

static Endereco* get_Endereco(testmod_teste *this)
{
  if(!this->EnderecoPtr) this->EnderecoPtr=loadEntity(Endereco,getVarSTR(&this->id_Endereco));
  return this->EnderecoPtr;
}

static void set_Endereco(testmod_teste *this, Endereco *novo)
{
  this->EnderecoPtr = novo;
  this->id_Endereco.INT64VAL = novo->id.INT64VAL;
}

static double get_altura(testmod_teste *this)
{
  return this->altura.DOUBLEVAL;
}

static void set_altura(testmod_teste *this, double novo)
{
  setVar(&this->altura,novo);
}

static Teste* get_teste(testmod_teste *this)
{
  return this->teste;
}

static void set_teste(testmod_teste *this, Teste* novo)
{
  this->teste = novo;
}

static int teste(testmod_teste *this,  int a, void *b)
{

}


static FieldEntry *getFields()
{
  static testmod_teste v;
  static FieldEntry fe[] = {
    {"id", ((long)&v.id - (long)&v)},
    {"nome", ((long)&v.nome - (long)&v)},
    {"idade", ((long)&v.idade - (long)&v)},
    {"id_Endereco", ((long)&v.id_Endereco - (long)&v)},
    {"altura", ((long)&v.altura - (long)&v)},
    {0, 0}
  };
  return fe;
}

testmod_testeInterface testmod_testeI = {
create,
getFields,
get_ref,
set_ref,
get_id,
set_id,
get_nome,
set_nome,
get_idade,
set_idade,
get_id_Endereco,
set_id_Endereco,
get_Endereco,
set_Endereco,
get_altura,
set_altura,
get_teste,
set_teste,
teste
};
